<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // var ldh = {
        //     uname: '刘德华',
        //     age: 18,
        //     sing: function () {
        //         console.log('冰雨');
        //     }
        // }
        // var zxy = {
        //     uname: '张学友',
        //     age: 19,
        //     sing: function () {
        //         console.log('慢慢');
        //     }
        // }
        // 因为一次创建一个对象 里面很多的属性与方法是大量相同的 我们只能复制
        // 因此我们可以利用函数的方法 重复这些相同的代码 我们就把这个函数称为 构造函数
        // 又因为这个函数不一样 里面封装的不是普通代码 而是对象
        // 构造函数就是把我们对象里面一些相同的属性和方法抽象处出来封装到函数里

        // 利用构造函数创建对象
        // 我们需要创建四大天王的对象 相同的属性 年龄 姓名 性别 相同的方法：唱歌
        // 构造函数的语法结构
        // function 构造函数名() {
        //     this.属性 = 值
        //     this.方法 = function () {

        //     }
        // }
        
        // new 构造函数名()
        function Star(uname, age, sex) {
            this.name = uname
            this.age = age
            this.sex = sex
            this.sing = function(song) {
                console.log(song);
            }
        }
        var ldh = new Star('刘德华', 18, '男')//调用函数返回的是一个对象
        console.log(ldh.name);
        console.log(ldh['sex']);
        console.log(ldh['age']);
        ldh.sing('冰雨')
        var zxy = new Star('张学友',19,'男')
        console.log(zxy.name);
        console.log(zxy['age']);
        console.log(zxy['sex']);
        zxy.sing('慢慢')
        //1.构造函数名字首字母大写
        //2.构造函数不需要return就可以返回结果
        //3.我们调用构造函数 必须使用new
        //4.我们只要new了一下Star 调用函数 就创建了一个对象 ldh {}
        //5.属性和方法前面必须添加this
    </script>
</head>

<body>

</body>

</html>